/********************************************************************************
 * Project Name		[JavaEE_Web]
 * File Name     	[JNDI.java]
 * Creation Date 	[2015-01-01]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ********************************************************************************/
package _notes.other;

/**
 * JNDI[Java Naming and Directory Interface] Java命名和目录接口, 位于javax.naming包<br/>
 * 
 * JNDI的主要作用在于:<br/>
 * 它可以把Java对象放在一个容器中[JNDI容器], 并为容器中的Java对象取一个名称, 以后程序想获得Java对象, 只需通过名称检索即可<br/>
 * 其核心API为Context, 它代表JNDI容器, 其lookup方法为检索容器中对应名称的对象<br/>
 * 
 * @author 不落的太阳(Sean Yang aka ShortPeace)
 * @version 1.0
 * @since jdk 1.8
 * 
 */
public class JNDI {

	public void configJndiInContextXML() {
		/**
		 * 全局配置方式:<br/>
		 * 
		 * 1. 将数据库驱动拷入TomcatHome/lib目录下<br/>
		 * 
		 * 2. 在TomcatHome/conf/context.xml中配置<br/>
		 * <code>
		 * <Resource 
		 *     name="jndi/JavaEE_Web" 
		 *     auth="Container" 
		 *     type="javax.sql.DataSource" 
		 *     driverClassName="com.mysql.jdbc.Driver" 
		 *     url="jdbc:mysql://localhost:3306/jdbc" 
		 *     username="root" 
		 *     password="123456" 
		 *     maxTotal="20" 
		 *     maxIdle="10" 
		 *     maxWaitMillis="10000"/>	
		 * </code>
		 * 
		 * 3. 在web.xml中配置指定的资源名称[此步骤不是必须]<br/>
		 * <code>
		 * <resource-ref>
		 *     <description>JavaEE_Web DataSource</description>
		 *     <res-ref-name>jdbc/JavaEE_Web</res-ref-name>
		 *     <res-type>javax.sql.DataSource</res-type>
		 *     <res-auth>Container</res-auth>
		 * </resource-ref>
		 * </code><br/>
		 * 
		 * 可以在context.xml中指定多个<resource><br/>
		 */
	}

	public void configJndiInTomcatPerProject() {
		/**
		 * 项目配置方式[推荐]: 为每一个Web项目创建一个独立的数据源<br/>
		 * 
		 * 1. 将数据库驱动拷入TomcatHome/lib目录下<br/>
		 * 
		 * 2. 在META-INF目录下新建一个context.xml<br/>
		 * <code>
		 * <Context>
		 *     <Resource 
		 *         name="jdbc/JavaEE_Web"
		 *         auth="Container"
		 *         type="javax.sql.DataSource"
		 *         username="root"
		 *         password="123456"
		 *         driverClassName="com.mysql.jdbc.Driver"
		 *         url="jdbc:mysql://localhost:3306/jdbc"
		 *         maxTotal="10"
		 *         maxIdle="5"
		 *         maxWaitMillis="60000"
		 *     />
		 * </Context>
		 * </code><br/>
		 * 
		 * 3. 在web.xml中配置指定的资源名称[此步骤不是必须]<br/>
		 * <code>
		 * <resource-ref>
		 *     <description>JavaEE_Web DataSource</description>
		 *     <res-ref-name>jdbc/JavaEE_Web</res-ref-name>
		 *     <res-type>javax.sql.DataSource</res-type>
		 *     <res-auth>Container</res-auth>
		 * </resource-ref>
		 * </code><br/>
		 */
	}

	public void configJndiInServerXML() {
		/**
		 * 局部配置[不推荐]<br/>
		 * 
		 * 1. 将数据库驱动拷入TomcatHome/lib目录下<br/>
		 * 
		 * 2. 修改TomcatHome/conf/server.xml的配置<br/>
		 * 在<Context>标签中添加JNDI配置<br/>
		 * <code>
		 * <Context docBase="JavaEE_Web" path="/JavaEE_Web" reloadable="true">
		 *     <Resource 
		 *         name="jdbc/JavaEE_Web"
		 *         auth="Container"
		 *         type="javax.sql.DataSource"
		 *         username="root"
		 *         password="123456"
		 *         driverClassName="com.mysql.jdbc.Driver"
		 *         url="jdbc:mysql://localhost:3306/jdbc"
		 *         maxTotal="10"
		 *         maxIdle="5"
		 *         maxWaitMillis="60000"
		 *     />
		 * </Context>
		 * </code><br/>
		 * 
		 * 3. 在web.xml中配置指定的资源名称[此步骤不是必须]<br/>
		 * <code>
		 * <resource-ref>
		 *     <description>JavaEE_Web DataSource</description>
		 *     <res-ref-name>jdbc/JavaEE_Web</res-ref-name>
		 *     <res-type>javax.sql.DataSource</res-type>
		 *     <res-auth>Container</res-auth>
		 * </resource-ref>
		 * </code><br/>
		 */
	}

	public void getConnectionFromJndi() {
		/**
		 * 在程序中使用JNDI配置的数据源<br/>
		 * <code>
		 * // 初始化JNDI
		 * Context initialContext = new InitialContext();
		 * // 得到JNDI容器
		 * Context envContext = (Context) initialContext.lookup("java:comp/env");
		 * // 从JDNI容器中检索name为jdbc/JavaEE_Web的数据源
		 * DataSource dataSource = (DataSource) envContext.lookup("jdbc/JavaEE_Web");
		 * // 获得连接
		 * Connection connection = dataSource.getConnection();
		 * </code><br/>
		 */
	}
}
